package com.yupi.yoj.schedule;

import cn.hutool.json.JSONUtil;
import com.yupi.yoj.constant.QueueConstant;
import com.yupi.yoj.model.entity.ContestUser;
import com.yupi.yoj.service.ContestUserService;
import io.jsonwebtoken.lang.Collections;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;

@Component
public class ScheduledTasks {

    @Autowired
    ContestUserService contestUserService;

    @Autowired
    RabbitTemplate rabbitTemplate;

    @Scheduled(cron = "0 30 13 * * ?") // 每天下午1:30执行
    public void executeAt1PM() {
        System.out.println("执行任务1：" + LocalDateTime.now());
        // 查询所有未结算的竞赛
        // 结算竞赛结果
        consumMsg();
    }

    @Scheduled(cron = "0 30 22 * * ?") // 每天晚上10:30执行
    public void executeAt10PM() {
        System.out.println("执行任务2：" + LocalDateTime.now());
        // 查询所有未结算的竞赛
        // 结算竞赛结果
        consumMsg();
    }

//        取出失信队列的消息，结算竞赛结果
    private void consumMsg() {
        // 查询所有未结算的竞赛
        // 结算竞赛结果
        List<ContestUser> contestUserList = contestUserService.getUnEndContest();
        if (Collections.isEmpty(contestUserList)) {
            return;
        }
        // 计算分数
        for(ContestUser contestUser : contestUserList) {
            if (contestUser == null) continue;;
            String contetsJsonStr = JSONUtil.toJsonStr(contestUser);
            // 通知消息队列，计算分数
            // 将比赛发布消息传入消息队列
            rabbitTemplate.convertAndSend(QueueConstant.QUEUE_COMPUTE_CONTEST, contetsJsonStr);
        }
    }
}